package com.quanyan.stadium.service.commonComponent;

import com.quanyan.stadium.entity.TbGameEvent;
import com.quanyan.stadium.entity.TbGameEventScore;
import com.quanyan.stadium.entity.TbGameRound;
import com.quanyan.stadium.entity.TbPoints;
import com.quanyan.stadium.entity.vo.StadiumNotifyMsg;
import com.quanyan.stadium.entity.vo.VDefinedGameSchedule;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用于定时进行一些数据刷新
 *
 *
 *
 * */
public interface DataReductionService {

    /**
     * 实时刷新, 推荐开始前1小时的比赛
     *
     * @return APIResponse null
     * */
    void gameBeforeOneHourEventStartRemind(int min);

    /**
     * 实时刷新.推荐要开始的比赛
     *
     * @return APIResponse null
     * */
    void gameEventStartRemind(int min);

    /**
     * 实时刷新积分和评级
     * @param min 分钟
     *
     * @return APIResponse null
     * */
    void updateUserScoreAndIntegral(int min);
    /**
     * 实时刷新比赛数量
     *
     *
     * @return APIResponse null
     * */
    void updateGameEventMsg();

    /**
     * 自动刷新官方赛事的报名状态
     *
     *
     * @return APIResponse null
     * */

    void officialGameEventTeamJoin();

    /**
     * 自动刷新官方赛的补位更新
     *
     *
     * @return APIResponse null
     * */

    void officialComplentGameEventTeamJoin();
    /**
     * 积分赛结束以后,开始记录用户积分  (废弃!!!!!!!)
     *
     * @param tbGameEvent
     * @param ids
     *
     * @return
     * */
    @SuppressWarnings("unused")
    @Deprecated
    void gameEventScoreRecord(TbGameEvent tbGameEvent, List<Integer> ids);

    /**
     * 积分赛结束以后,统计胜利用户的积分信息 (废弃!!!)
     *
     * @param tbGameEvent
     *
     * @return
     * */

    @SuppressWarnings("unused")
    @Deprecated
    void gameEventFinishWinScore(List<TbGameEventScore> tbGameEventScores, TbGameEvent tbGameEvent);

    /**
     * 赛事结束以后,调用 栏目积分
     *
     * @param stadiumNotifyMsg
     *
     * @return APIResponse null
     * */

    void gameScheduleCategoryScoreRecord(StadiumNotifyMsg stadiumNotifyMsg);

    /**
     *  一个赛事结束以后,开始记录该积分的积分,然后更新到排名表
     *
     *  @param stadiumNotifyMsg
     *
     *  @return
     *
     * */
    void officialGameEventTeamJoinUpdate(StadiumNotifyMsg stadiumNotifyMsg);

    /**
     *  一个赛事结束以后,数据汇总
     *
     *  @param stadiumNotifyMsg
     *
     *  @return
     *
     * */
    void officialGameEventCollectMsg(StadiumNotifyMsg stadiumNotifyMsg);

    /**
     *  一个赛事结束以后,消息推送
     *
     *  @param stadiumNotifyMsg
     *
     *  @return
     *
     * */
    void officialGameEventPushMsg(StadiumNotifyMsg stadiumNotifyMsg);

    /**
     * 赛事的每个赛程结束以后,调用 评级积分
     *
     * @param stadiumNotifyMsg
     *
     * @return APIResponse null
     * */

    void gameScheduleScoreRecord(StadiumNotifyMsg stadiumNotifyMsg);
    /**
     * 为了补充gameScheduleCategoryScoreRecord方法,将gameScheduleCategoryScoreRecord方法拆解   (废弃!!!!)
     *
     * */

    @SuppressWarnings("unused")
    @Deprecated
    void gameScheduleCategoryScoreRecordSon(TbGameEvent tbGameEvent, Map<Integer, List<VDefinedGameSchedule>> vMap,
                                            Map<Integer, List<Integer>> clubMasterUids, Map<Integer, TbPoints> uidCategoryScore);
    /**
     * 记录用户个人的赛程,初始化
     *
     * @param stadiumNotifyMsg
     *
     * @return APIResponse null
     * */

    void userGameScheduleInit(StadiumNotifyMsg stadiumNotifyMsg);
    /**
     * 为了补充userGameScheduleInit方法,将userGameScheduleInit拆解
     *
     * */
    void userGameScheduleInitSon(Map<Integer, Set<VDefinedGameSchedule>> mapSchedules, TbGameEvent tbGameEvent, Map<Integer, List<Integer>> mapClub);
    /**
     * 更新用户赛程的基本信息,更新
     *
     *
     * @return APIResponse null
     * */

    void userGameScheduleUpdate(StadiumNotifyMsg stadiumNotifyMsg);
    /**
     * 记录用户个人比分最终状态,最后
     *
     *
     * @return APIResponse null
     * */

    void userGameScheduleFinally(StadiumNotifyMsg stadiumNotifyMsg);
    /**
     * 为了补充userGameScheduleFinally方法,将userGameScheduleFinally拆解
     *
     * */
    void userGameScheduleFinallySon(Map<Integer, Set<VDefinedGameSchedule>> mapSchedules, Map<Integer, List<Integer>> mapClub, TbGameEvent tbGameEvent);
    /**
     * 官方赛事结束,调起用户数据统计
     * 该方法比较复杂,其中涉及到多个层面的操作
     *
     *
     * @return APIResponse null
     * */
    void userGameEventCollect(StadiumNotifyMsg stadiumNotifyMsg);
    /**
     * PK赛事结束,调起用户数据统计
     *
     *
     * @return APIResponse null
     * */
    void userPKGameEventCollect(StadiumNotifyMsg stadiumNotifyMsg);
    /**
     * PK排行分页插入到redis
     *
     *
     * @return APIResponse null
     * */
    void generateNextPagePKRankScore(StadiumNotifyMsg stadiumNotifyMsg);
    /**
     * 更新用户雷达图
     *
     *
     * @return APIResponse null
     * */
    void updateGameRadarChartBatch(StadiumNotifyMsg stadiumNotifyMsg);
    /**
     * 某一轮次结束,开始调起一些列推送,对当前轮次,或者上一轮进行处理
     *
     *
     * @return APIResponse null
     * */
    void generateCurrentRoundMQ(TbGameRound preTbGameRound, TbGameRound currentTbGameRound, TbGameEvent tbGameEvent, Boolean isLast);

    /**
     * 某一轮次结束,开始调起一些列推送,对当前轮次,或者上一轮进行处理
     *
     *
     * @return APIResponse null
     * */
    void generateCurrentRoundPushMsgAndMQ(StadiumNotifyMsg stadiumNotifyMsg);
    /**
     * 获取一个轮次用户的胜负
     *
     * */
    Map<Integer, Byte> getUserScheduleType(TbGameEvent tbGameEvent, TbGameRound tbGameRound);
    /**
     * 获取一赛事下报名用户集合,俱乐部报名的获取管理员+代表队+主席的集合
     *
     * */
    List<Integer> queryUidsFromTbGameEvent(TbGameEvent tbGameEvent);

    /**
     * 初始化用户 的 栏目积分
     *
     * */
    void initUserCategoryScore(Integer uid, Integer cityId);

    /**
     * 个人赛统计
     *
     * */
    void personGameEventFinishSetPersonTop(TbGameEvent tbGameEvent, Set<Integer> uIds);
}
